#include "DispositivoAudio.h"

using std::cerr;
using std::endl;

DispositivoAudio::DispositivoAudio() {
	this->frames = 52;
	this->canales = 2;
	this->buf_size = this->frames * this->canales;
}

int DispositivoAudio::recuperacion(int error) {
    switch(error) {
        case -EPIPE:
            cerr << "Audio: Buffer Underrun" << endl;
            if((error = snd_pcm_prepare(this->handle)) < 0)
                cerr << "Audio: no se pudo recuperar, " <<
                "snd_pcm_prepare fallo:" << snd_strerror(error) << endl;
            error = 0;
            break;
        case -ESTRPIPE:   // suspend event
            cerr << "Audio: Error ESTRPIPE" << endl;
            // EAGAIN -> no se procesa inmediatamente
            while ((error = snd_pcm_resume(this->handle)) == -EAGAIN)
                sleep(1);
            if(error < 0) {
                if((error = snd_pcm_prepare(this->handle)) < 0)
                    cerr << "Audio: no se pudo recuperar,"
                    " snd_pcm_prepare fallo:" << snd_strerror(error) << endl;
            }
            error = 0;
            break;
        case -EBADFD:   // descriptor PCM es incorrecto
            cerr <<"Audio: Error EBADFD" << endl;
            error = -1;
            break;
        default:
            cerr << "Audio: Error desconocido: " << error << endl;
            error = -1;
            break;
    }
    return error;
}

DispositivoAudio::~DispositivoAudio() {
	//snd_pcm_hw_params_free(this->params);
}
